package com.xjh.basestudy.javabase.javaweb.jdbc;



import com.xjh.basestudy.javabase.javaweb.jdbc.util.JDBCUtils;

import java.sql.*;
import java.util.Scanner;

public class jdbcLoginExercise {
    public static void main(String[] args) {
        //1.键盘录入，接收用户名和方法
        Scanner sc = new Scanner(System.in);
        System.out.println("输入用户名:");
        String username = sc.nextLine();
        System.out.println("输入密码:");
        String password = sc.nextLine();

        //2.调用方法
//        boolean flag = new jdbcLoginExercise().login(username, password);
        boolean flag = new jdbcLoginExercise().login2(username, password);

        //3.判断结果，输出不同语句
        if (flag) {//在if语句传一个Boolan类型，默认为true
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败，用户名或密码错误");
        }
    }

    /*以下内容是登录方法*/
    public boolean login(String username, String password) {
        //判断是否输入用户名和密码，若为空，则返回false
        if (username == null || password == null) {
            return false;
        }
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        //连接数据库判断是否登录成功
        //1.获取连接
        try {
            conn = JDBCUtils.getConnecttion();//调用工具类，注册驱动，获取连接对象
            //2.定义sql:加入用户名和密码，注意格式
            String sql = "select * from user where username ='" + username + "' and password  = '" + password + "' ";
            System.out.println(sql);
            //3.获取执行sql的对象
            stmt = conn.createStatement();
            //4.执行查询
            rs = stmt.executeQuery(sql);
            //5.判断
 /*           if(rs.next()){//不要这样写，因为next返回的本来就是boolean
                return true;
            }else{
                return false;
            }*/
            return rs.next();//直接返回next

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(rs, stmt, conn);//用工具类关掉三个资源
        }

        return false;//如果出现了一次就返回false
    }


    /*第二种登录方法登录方法*/
    public boolean login2(String username, String password) {
        //判断是否输入用户名和密码，若为空，则返回false
        if (username == null || password == null) {
            return false;
        }
        Connection conn = null;
        PreparedStatement pstmt = null;//将stmt修改为pstmt
        ResultSet rs = null;
        //连接数据库判断是否登录成功
        //1.获取连接
        try {
            conn = JDBCUtils.getConnecttion();//调用工具类，注册驱动，获取连接对象
            //2.定义sql:直接等于？
            String sql = "select * from user where username = ? and password  = ? ";
            System.out.println(sql);
            //3.获取执行sql的对象:prepareStatement类型
            pstmt = conn.prepareStatement(sql);
            //添加给？赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);

            //4.执行查询(不需要传参)
            rs = pstmt.executeQuery();
            //5.判断
 /*           if(rs.next()){//不要这样写，因为next返回的本来就是boolean
                return true;
            }else{
                return false;
            }*/
            return rs.next();//直接返回next

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(rs, pstmt, conn);//用工具类关掉三个资源
        }

        return false;//如果出现了一次就返回false
    }
}
